home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / emul / cp4 / support / easy1541 / dev / examples / iecsave.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  2KB  |  148 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <exec/exec.h>
  5. #include <exec/execbase.h>
  6. #include <exec/memory.h>
  7. #include <dos/dos.h>
  8. #include <proto/exec.h>
  9. #include <proto/dos.h>
  10.  
  11. #include <iec/iec.h>
  12.  
  13. //----------------------------------------
  14. //IECSave 1.0
  15. //
  16. //Writes a file to the disk inserted in
  17. //the 1541 drive.
  18. //
  19. //----------------------------------------
  20.  
  21.  
  22. struct iecbase *IECBase;
  23.  
  24. char Version[]="$VER:IECSave 1.0 (01.09.96) by Fabrizio Farenga";
  25. UWORD BlockSize;
  26. int c;
  27. char* SourceName;    //File to read (from AmigaDos)
  28. char* DestName;        //File to write (to 1541)
  29.  
  30.  
  31. FILE *fp;    //File di uscita
  32.  
  33. struct RDArgs *rda;
  34. LONG argv[3]={0,0,0};
  35. char device=8;    //Defalt device #
  36.  
  37. //******************************************
  38. // Send a null-terminated string to the 1541
  39. //******************************************
  40. void SendString(char* string)
  41. {
  42. int t;
  43. for (t=0;string[t]!=0;t++) CIOut(string[t]); 
  44. }
  45.  
  46. void ReadFile(void)
  47. {
  48.  
  49. fp=fopen(SourceName,"rb");    //Open the file to read (from AmigaDos)
  50.  
  51.     if (fp!=0)
  52.     {
  53.     printf ("\n");
  54.  
  55.     //SAVE "<DestName>",<device>,1
  56.     Listen(device);
  57.     Second(CMD_OPEN+1);
  58.  
  59.  
  60.     if (IECBase->iec_ST!=ST_OK)
  61.         {
  62.         printf ("?DEVICE NOT PRESENT\n\n");
  63.         return;
  64.         }
  65.  
  66.  
  67.     //Send the filename
  68.     SendString(DestName);
  69.     UnListen();
  70.  
  71.  
  72.     //Send data
  73.     Listen(device);
  74.     Second(CMD_DATA+1);
  75.  
  76.         while (IECBase->iec_ST==ST_OK)
  77.         {
  78.         c=getc(fp);    //Read a byte from AmigaDos until EOF
  79.             if (c==EOF) break;
  80.         CIOut(c);    //Write the byte to 1541
  81.             if (IECBase->iec_ST!=ST_OK)    //If error writing...
  82.             {
  83.             printf ("?SAVE ERROR\n\n");
  84.             break;
  85.             }
  86.         }
  87.  
  88.     UnListen();
  89.  
  90.     Listen(device);    //CLOSE
  91.     Second(CMD_CLOSE+1);
  92.     UnListen();
  93.  
  94.  
  95.     fclose(fp);
  96.     }
  97.     else
  98.     {
  99.     printf ("Can't open %s for input",SourceName);
  100.     }
  101. }
  102.  
  103.  
  104. void main(void)
  105. {
  106.  
  107.  
  108. if ((rda = ReadArgs("FROM/A,TO,DEVICE/N",argv,NULL)) != NULL)
  109.     {
  110.     if (argv[0]!=0) SourceName=(char*)argv[0];    //Source filename
  111.  
  112.     if (argv[1]!=0) DestName=(char *)argv[1];    //Destination filename
  113.     else DestName=(char *)argv[0];                //If none, use the source name
  114.  
  115.     if (argv[2]!=0) device=*(LONG *)argv[2];    //Device (if none, device = 8)
  116.     }
  117. else
  118.     {
  119.     printf ("Required argument missing\n\n");
  120.     return;
  121.     }
  122.  
  123.  
  124. if ((device<4)||(device>30))
  125.     {
  126.     printf ("\n?DEVICE NOT PRESENT\n\n");
  127.     return;
  128.     }
  129.  
  130. IECBase = (struct iecbase*)OpenLibrary("iec.library",0L);
  131.  
  132. if (IECBase!=0)
  133.     {
  134.  
  135.     ReadFile();
  136.  
  137.     CloseLibrary((struct Library*)IECBase);
  138.     }
  139. else
  140.     {
  141.     printf ("Can't open iec.library\n");
  142.     return;
  143.     }
  144.  
  145.     if (rda!=0) FreeArgs(rda);
  146.  
  147. }
  148.